package com.itheima.controller;

import com.alibaba.fastjson.JSON;
import com.itheima.pojo.User;
import com.itheima.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <dl>
 * <dd>描述: ~节点业务逻辑实现</dd>
 * <dd>创建时间：  15:29 2020/8/16</dd>
 * <dd>创建人： zz</dd>
 * <dt>版本历史: </dt>
 * <pre>
 * Date         Author      Version     Description
 * ------------------------------------------------------------------
 * 2020/8/16      guodong       1.0        1.0 Version
 * </pre>
 * </dl>
 */
@RestController
@Slf4j
public class UserController {

    @Autowired
    private UserService userService;

    @Autowired
    private RedisTemplate redisTemplate;

    /**
    * @Date: 15:31 2020/8/16
    * @Param: []
    * @return: List<User>
    * @Description: 查询所有用户
    **/
    @RequestMapping("findAll")
    public List<User> findAll(){
        return userService.findAll();
    }

    /*
        restful风格：
          get: 查询
          post/put: 新增/修改
          delete： 删除

        仅支持get请求：
       @RequestMapping(value = "getRedis", method = RequestMethod.GET)  ==  @GetMapping("getRedis")
     */
   // @RequestMapping(value = "getRedis", method = RequestMethod.POST)
    @GetMapping("getRedis")
    public String getRedis(){
        redisTemplate.boundValueOps("28.key").set("28 is a good  class");
        String str = (String) redisTemplate.boundValueOps("28.key").get();
        return str;
    }


    /*
        1.从redis缓存中查询数据
        2.如果查询到数据直接返回
        3.如果查询不到数据从db查询
        4.将数据放入缓存中
        5.将数据返回
     */
    @RequestMapping("findAllStr")
    public String findAllStr(){
        //1.从redis缓存中查询数据
        String userListStr = (String) redisTemplate.boundValueOps("28.findAll").get();
        //2.如果查询到数据直接返回
       /* if(null != userListStr && "" != userListStr){

        }*/
       if(StringUtils.isEmpty(userListStr)){ //字符串为空
           //3.如果查询不到数据从db查询
           List<User> userList = userService.findAll();
           System.out.println("从缓存中没有查询到数据，从数据库中获取...");
           //4.将数据放入缓存中
           userListStr = JSON.toJSONString(userList);
           redisTemplate.boundValueOps("28.findAll").set(userListStr);
       }
        //5.将数据返回
        return userListStr;
    }
}
